package com.bb.flow.parser;

import com.bb.flow.api.exception.ParseException;
import com.bb.flow.config.FlowInfo;
import com.bb.flow.service.exception.FlowTemplateNameNullException;

/**
 * @author bigbeard
 * 流程解析器
 */
public interface NodeParser {
    /**
     * 解析流程
     *
     * @param context 流程配置信息
     * @return 解析完毕的流程
     */
    FlowInfo parse(String context) throws FlowTemplateNameNullException, ParseException;

    /**
     * 注入对象创建器
     *
     * @param objectCreator 创建器
     */
    void setObjectCreator(ObjectCreator objectCreator);

    /**
     * 注入对象属性赋值类
     *
     * @param propertyAssignment 属性赋值类
     */
    void setPropertyAssignment(PropertyAssignment propertyAssignment);

    /**
     * 将对象转成字符串
     *
     * @param flowInfo 流程
     * @return 字符串的流程
     */
    String unParse(FlowInfo flowInfo);

    /**
     * 设置是否创建节点对象实例
     *
     * @param isCreate true：默认，创建；false：不创建
     */
    void setCreateNodeInstance(boolean isCreate);
}
